package main

import (
	"bufio"
	"fmt"
	"os"
)

// 判断所给路径文件/文件夹是否存在3  直接用os.IsNotExist(err)
func Exists(path string) bool {
	_, err := os.Stat(path) //os.Stat获取文件信息
	if os.IsNotExist(err) {
		return false
	}
	return true
}

func createFile(path string) error {
	f, err := os.Create(path)
	defer f.Close()
	if err != nil {
		return err
	} else {
		_, err = f.Write([]byte("要写入的文本内容"))
		return nil
	}
}

func main() {
	////创建一个新文件，写入内容 5 句 “http://c.biancheng.net/golang/”
	//filePath := "/Users/songhao/goProjects/gobyexample/examples/file/ca/aaa.txt"
	//file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, 0666)
	//if err != nil {
	//	fmt.Println("文件打开失败", err)
	//}

	dir, err := os.Getwd()
	if err != nil {
		fmt.Println(err.Error())
	}

	targetPath := dir + "/file/ca:test:aaa/"

	//1、判断文件夹是否存在
	existed := Exists(targetPath)
	if !existed {
		//2、创建文件夹
		err := os.MkdirAll(targetPath, os.ModePerm)
		if err != nil {
			fmt.Println(err.Error())
		}
	}

	var targetFile *os.File

	//3、判断文件是否存在
	targetFilePath := targetPath + "songhao.txt"
	existed = Exists(targetFilePath)
	if !existed {
		file, err := os.Create(targetFilePath)
		if err != nil {
			fmt.Println(err.Error())
		}
		targetFile = file
	} else {
		//4、文件存在，先清空文件，再打开文件
		err := os.Truncate(targetFilePath, 0)
		if err != nil {
			fmt.Println(err.Error())
		}
		file, err := os.OpenFile(targetFilePath, os.O_WRONLY|os.O_CREATE, 0666)
		if err != nil {
			fmt.Println(err.Error())
		}
		targetFile = file
	}

	////3、判断文件是否存在
	//targetFilePath := targetPath + "songhao.txt"
	//
	////4、不管文件存不存在，都创建文件。如果文件已存在，会被截断为空文件
	//file, err := os.Create(targetFilePath)
	//if err != nil {
	//	fmt.Println(err.Error())
	//}
	//targetFile = file
	//
	//及时关闭file句柄
	defer targetFile.Close()
	//写入文件时，使用带缓存的 *Writer
	write := bufio.NewWriter(targetFile)

	write.WriteString("123333666")

	//for i := 0; i < 5; i++ {
	//	write.WriteString("http://c.biancheng.net/golang/1 \n")
	//}
	//for i := 0; i < 5; i++ {
	//	write.WriteString("aaa \n")
	//}
	//for i := 0; i < 5; i++ {
	//	write.WriteString("bbb \n")
	//}
	//Flush将缓存的文件真正写入到文件中
	write.Flush()
}
